package ar.edu.sovietrussia;

import java.util.ArrayList;
import java.util.List;

import exceptions.NotEnoughPlayersException;

/**
 * TODO: description
 */
public class FormacionStrategyImpl extends FormacionStrategy {
	
	//-----INSTANCE VARIABLES ---------------------------------------//
	private int id;
	private List<Posicion> posiciones;
	
	//-----CONSTRUCTORS ---------------------------------------//
	
	public FormacionStrategyImpl(){
		posiciones = new ArrayList<Posicion>();
		posiciones.add(Posicion.ARQUERO);
		posiciones.add(Posicion.CENTRAL);
		posiciones.add(Posicion.CENTRAL);
		posiciones.add(Posicion.VOLANTE_DEFENSIVO);
		posiciones.add(Posicion.VOLANTE_LATERAL);
		posiciones.add(Posicion.ENGANCHE);
		posiciones.add(Posicion.ENGANCHE);
		posiciones.add(Posicion.MEDIA_PUNTA);
		posiciones.add(Posicion.MEDIA_PUNTA);
		posiciones.add(Posicion.DELANTERO);
		posiciones.add(Posicion.DELANTERO);
	} 
	
	//-----OTHER BEHAVIOUR ---------------------------------------//
	
	
	public Formacion armarFormacion(final Equipo equipo){

    	if(equipo.getJugadores().size()<11){ //Si no hay suficientes jugadores como para un equipo basico
        	//TIRO EXCEPTION DE QUE NO ME ALCANZAN LOS JUGADORES
        	throw new NotEnoughPlayersException("No hay jugadores suficientes para armar formacion!");
        }
    	Formacion ret = new Formacion(); //Creo una formacion
    	Equipo equipoADistribuir = new Equipo(equipo.getNombre());
    	equipoADistribuir.setTecnico(equipo.getTecnico());
    	equipoADistribuir.getJugadores().addAll(equipo.getJugadores());
    	ret.setEquipo(equipo);//Le setteo su equipo
        
        for(Posicion posAct : this.posiciones){ //Recorro las pociciones a rellenar...
        	Jugador nextTitular = equipoADistribuir.bestPlayerForPosition(posAct); //Busco el mejor jugador
        	ret.getTitulares().add(new Titular(nextTitular,posAct)); //Lo setteo como titular
        	equipoADistribuir.getJugadores().remove(nextTitular);  //Lo elimino de los jugadores
    	}
        ret.setSuplentes(equipoADistribuir.getJugadores()); //Setteo los suplentes
        ret.setEquipo(equipo); //Como lo rompi, ahi lo asigno de vuelta
        return ret;
	}
	
	//-------------//

	public void setId(int id) {
		this.id = id;
	}

	public int getId() {
		return id;
	}

	public List<Posicion> getPosiciones() {
		return posiciones;
	}

	public void setPosiciones(List<Posicion> posiciones) {
		this.posiciones = posiciones;
	}
}